/**
 * 验证手机号格式
 * @param {string} phone 手机号码
 * @returns {boolean} 是否有效
 */
export function validatePhone(phone: string): boolean {
  // return /^1[3-9]\d{9}$/.test(phone);
  return /^.{4,30}$/.test(phone)
}

/**
 * 验证邮箱格式
 * @param {string} email 邮箱地址
 * @returns {boolean} 是否有效
 */
export function validateEmail(email: string): boolean {
  return /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/.test(email)
}

export function validatePassword(password: string) {
  return /^.{8,12}$/.test(password)
}

/* 生成随机密码：包含大小写字母、数字和特殊符号 
‌字符集‌：定义了包含大写字母、小写字母、数字和特殊字符的字符集。
‌初始密码‌：确保每种字符类型（大写字母、小写字母、数字和特殊符号）至少有一个字符。
‌填充剩余字符‌：从所有字符集中随机选择字符，直到达到所需的密码长度。
‌打乱密码‌：使用 Fisher-Yates 洗牌算法打乱密码中的字符顺序，以确保字符分布均匀。
*/
export function generateRandomPassword(minLength = 8, maxLength = 12) {
  if (minLength < 4) {
    throw new Error('密码长度至少为4，以包含大小写字母、数字和特殊符号')
  }
  // 字符集
  const upperCase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  const lowerCase = 'abcdefghijklmnopqrstuvwxyz'
  const numbers = '0123456789'
  const specialChars = '!@#$%&*()_+[]{}|;:,.<>?'

  // 确定密码长度
  const length = Math.floor(Math.random() * (maxLength - minLength + 1)) + minLength

  const allChars = upperCase + lowerCase + numbers + specialChars

  // 确保每种字符至少有一个
  let password = [
    upperCase[Math.floor(Math.random() * upperCase.length)],
    lowerCase[Math.floor(Math.random() * lowerCase.length)],
    numbers[Math.floor(Math.random() * numbers.length)],
    specialChars[Math.floor(Math.random() * specialChars.length)],
  ]

  // 填充剩余字符
  for (let i = password.length; i < length; i++) {
    password.push(allChars[Math.floor(Math.random() * allChars.length)])
  }

  // 打乱密码
  for (let i = password.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1))
    ;[password[i], password[j]] = [password[j], password[i]]
  }

  return password.join('')
}

/* 验证密码强度 */
export function validatePasswordStrength(password: string) {
  let level = 0 // 默认 0 级
  const minLength = 8
  const hasLowercase = /[a-z]+/.test(password)
  const hasUppercase = /[A-Z]+/.test(password)
  const hasNumber = /\d+/.test(password)
  const hasSpecialChar = /[\W_]+/.test(password)

  // 检查密码长度和包含的类型
  const isValidLength = password.length >= minLength
  // const hasRequiredTypes = hasLowercase && hasUppercase && hasNumber && hasSpecialChar

  if (hasLowercase) {
    level++
  }
  if (hasUppercase) {
    level++
  }
  if (hasNumber) {
    level++
  }
  if (hasSpecialChar) {
    level++
  }
  if (isValidLength) {
    level++
  }
  // return isValidLength && hasRequiredTypes
  return level
}
